package nfeitens;

import aliq.Aliquotas;
import aliq.AliquotasDao;
import bd.ConBdSqlS;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Date;
import java.util.List;
import master.Master;
import master.NfeItensTableModel;
import nfe.Nfe;
import ref.ProdutoReferencia;
import ref.ProdutoReferenciaDao;
import util.Util;

/**
 *
 * @author camilo
 */
public class NfeItensDao {

  protected Connection con;

  public NfeItensDao() throws SQLException {
    this.con = ConBdSqlS.getConexao();
  }

  public void adicionar(NfeItensTableModel nfeitm, Nfe nfe) throws SQLException {
//    Código SQL
    String sql = "INSERT INTO notafiscalitens(NotaFiscal, Item, Produto, Barras, Descricao, CF, CFOP, CST, "
            + "MVA, Quantidade, Acomodacao, ValorUnitario,  ICMS, IPI, REDICMS, "
            + "ValorICMS, ValorIPI, ValorTotal, Aliquota, DataValidade, PrecoVenda, Desconto, Lote,"
            + "mvaaliquota, mva_credIcms, valor_bonificado,UsaCredICMS_Entrada, UsaCredIcms_Saida, BaseICMS) "
            + "VALUES (?, ?, ?, ?, ?, '1', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, '0', '0', '0', '0',"
            + "'0', '0', 'True', 'True', '0');";
    PreparedStatement stmt = con.prepareStatement(sql);

    for (int i = 0; i < nfeitm.getRowCount(); i++) {
      Aliquotas al = new Aliquotas();
      AliquotasDao aldao = new AliquotasDao();
      ProdutoReferencia pref = new ProdutoReferencia();
      ProdutoReferenciaDao prefdao = new ProdutoReferenciaDao();
      //    Captura os valores dos atributos dos objetos e seta os parâmetros SQL
      String barras = nfeitm.getValueAt(i, 2).toString();
      String ref = nfeitm.getValueAt(i, 10).toString();
      /** Verifica se a referencia já existe no banco de dados
       * caso não exista, adiciona o registro no banco de dados */
      pref = prefdao.getProdRef(ref, nfe.getEntidade());
      if (pref.getReferencia() == null) {
        prefdao.adicionar(barras, ref, nfe);
      }

      stmt.setString(1, nfe.getID().toString());
      NumberFormat nf = new DecimalFormat("000");
      String item = nf.format(Double.parseDouble(nfeitm.getValueAt(i, 0).toString()));
      stmt.setString(2, item); //item
      
      stmt.setString(3, nfeitm.getValueAt(i, 1).toString()); // produto
      stmt.setString(4, barras); // barras
      stmt.setString(5, nfeitm.getValueAt(i, 3).toString()); // descrição
      stmt.setString(6, nfeitm.getValueAt(i, 4).toString()); // cfop
      stmt.setString(7, nfeitm.getValueAt(i, 5).toString()); // cst
      
      if (nfeitm.getValueAt(i, 6) != null) {
        stmt.setString(8, nfeitm.getValueAt(i, 6).toString()); // mva
      } else {
        stmt.setString(8, "0");
      }
      
      stmt.setString(9, nfeitm.getValueAt(i, 7).toString()); // quantidade
      
      if (nfeitm.getValueAt(i, 8) != null || nfeitm.getValueAt(i, 8) == 0) {
        stmt.setString(10, nfeitm.getValueAt(i, 8).toString()); // acomodacao
      } else {
        stmt.setString(10, "1");
      }
      stmt.setString(11, nfeitm.getValueAt(i, 9).toString()); // valor Unitario
      
      if (nfeitm.getValueAt(i, 11)!= null) {
        stmt.setString(12, nfeitm.getValueAt(i, 11).toString()); // icms
      } else {
        stmt.setString(12,"0");
      }

      if (nfeitm.getValueAt(i, 14)!= null) {
        stmt.setString(13, nfeitm.getValueAt(i, 14).toString()); // ipi
      } else {
        stmt.setString(13,"0");
      }

      if (nfeitm.getValueAt(i, 12) != null) {
        stmt.setString(14, nfeitm.getValueAt(i, 12).toString()); //red icms
      } else {
        stmt.setString(14,"0");
      }
      
      if (nfeitm.getValueAt(i, 13) != null) {
        stmt.setString(15, nfeitm.getValueAt(i, 13).toString()); // valoricms
      } else {
        stmt.setString(15,"0");
      }
      
      if (nfeitm.getValueAt(i, 14) != null) {
        stmt.setString(16, nfeitm.getValueAt(i, 14).toString()); // valor ipi
      } else {
        stmt.setString(16,"0");
      }
      
      if (nfeitm.getValueAt(i, 16) != null) {
        stmt.setString(17, nfeitm.getValueAt(i, 16).toString()); // valor total
      } else {
        stmt.setString(17,"0");
      }
      
      if (nfeitm.getValueAt(i, 11) != null) {
        Integer ic = Integer.parseInt(nfeitm.getValueAt(i, 11).toString().replaceAll(".0", ""));
        al = aldao.getCodAliq(ic.toString());
      stmt.setString(18, al.getAliquota().toString()); // aliquota
      } else {
        stmt.setString(18,"0");
      }
      stmt.setString(19, new Util().formatData(new Date(System.currentTimeMillis())));
      //    Executa o código SQL
      stmt.execute();

    }
    //    Fecha a conexão
      stmt.close();
  }
}